﻿#include <iostream>
#include "Add.h"
#include "NamespaceTest.h"



int main()
{
	std::cout << "Hello World!\n";


	//C++标准规定C++编译器应该支持256级嵌套
	int value{};
	std::cin >> value;

	if (value > 0)
	{ // block 2, 层级 2
		if ((value % 2) == 0)
		{ // block 3, 层级 3
			std::cout << value << " is positive and even\n";
		}
		else
		{ // block 4, 层级 3
			std::cout << value << " is positive and odd\n";
		}
	}

	//使用自定义命名空间的方法
	ADD::add(1, 2);


	//关于局部变量：
	/*
	1,局部变量是在函数内定义的变量;
	2,局部变量具有代码块作用域，这意味着从定义点到定义它们的代码块的末尾都在作用域内。
	3,尽管函数参数没有在函数体内定义，但对于一般函数，它们可以被视为函数体内作用域的一部分。
	4,作用域内的所有变量名都必须唯一
	5,局部变量具有自动存储期,这意味着它们在定义点创建，在定义它们的代码块末尾销毁。
	6,局部变量可以在嵌套块内定义。这与函数体块中的局部变量相同
	7,局部变量没有链接属性，这意味着每个声明都是唯一的对象
	8,变量应在最有限的作用域内定义
	*/


	//关于全局变量
	/*
	1,变量也可以在函数外部声明。这样的变量称为全局变量
	2,在全局命名空间中声明的标识符具有全局命名空间作用域;
	3,全局变量就可以在文件中的任何位置使用
	4,全局变量在程序启动时创建，在程序结束时销毁。这称为静态存储期。
	5,具有静态存储期的变量有时称为静态变量。
	6,全局变量也可以是常量
	7，类似于嵌套块中的变量会隐藏外部块中的同名变量，与全局变量同名的局部变量将遮挡全局变量

	最后：通常应完全避免使用非常量的全局变量！
	*/

	//使用全局变量
	std::cout << ADD::g_x << "\n";
	std::cout << ADD::g_y << "\n";


	//指定命名空间，可不写前缀
	using namespace Test;
	//直接调用test方法
	test();

	//内联命名空间方法
	V1::doSomething();
	
	return 0;
}

